import java.util.*;
import java.util.Random;
/**
 * Created with IntelliJ IDEA.
 * Description:.
 * User: 独影
 * Date: 2022-11-22
 * Time: 15:07
 */
public class ForHomework {






//20.输出星号。
    public static void func(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(i == j) {
                    System.out.print("*");
                }else if(i+j == n-1) {
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

    public static void main20(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //自己在ID上写不用加上这个循环
        // 在牛客网上有不同的例子，要加上循环才能通过它不同的例子
        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            func(n);
        }
    }
    




    //19. 打印 1 - 100 之间所有的素数
    public static void main19(String[] args) {
        for ( int i = 1; i <= 100; i+=2) {
            int j = 2;
            for (; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    break;
                }
            }
            if (j > Math.sqrt(i)) {
                System.out.print(i +" ");
            }
        }
    }




    //18.输出 1000 - 2000 之间所有的闰年
    //闰年的判定条件  4的倍数但不是100的倍数，是400的倍数
    public static void main18(String[] args) {
        int count = 0;
        for (int year = 1000; year <= 2000; year++) {
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                System.out.println(year + " ");
                count ++;
            }
        }
        System.out.println();
        System.out.println(count);
    }






    //17.  1-100有多少数字9
    //个位数是9  9 19 29 39 49 59 69 79 89 99   这几个是%10=9
    //十位数是9  90 91 92 93 94 95 96 97 98 99   这几个是/10=9
    //一共20个

    public static void main17(String[] args) {
        int count = 0;
        for (int i = 1; i <= 99; i++) {
            if (i % 10 == 9) {
                count ++;
            }
            if (i / 10 == 9) {
                count ++;
            }
        }
        System.out.println(count);
    }




    //16.逆序输出一个整数的每一位
    //如123 输出3 2 1
    public static void print(int n) {
        while (n != 0) {
            System.out.print((n % 10)+" ");
            n /= 10;
        }
    }
    public static void main16(String[] args) {
        print(123);

    }





    //15.获取一个数二进制序列中所有偶数位和奇数位，并分别输出二进制序列
    //  0000 0000 0000 0000 0000 0000 0000  1011   按位&1
    //  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1   奇数位结果
    //  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1   偶数位结果
    //下标从0开始，32位的最左边的二进制下标就是31
    public static void pintOne(int n) {
        for (int i = 30; i >= 0; i-=2) {
            System.out.print(((n >> i) & 1)+"  ");//加空格隔开
        }
        System.out.println();
        for (int i = 31; i >= 1; i-=2) {
            System.out.print(((n >> i) & 1)+" ");
        }
    }
    public static void main15(String[] args) {
        pintOne(11);
    }






    //14.写一个函数返回参数二进制中1的个数
    //例如0011 0011 中有4个1
    public static int numOfOne1(int n){
        int count = 0;
        while (n != 0){
            if ((n & 1)== 1){
                count++;
            }
            n = n >>> 1;
        }
        return  count;
    }
    //方法2，这算一个小算法
    //例如n，每次按位与(n-1)。都会少一个1；
    //最后等于0的时候说明一个1都没有了
    public static int numOfOne2(int n){
        int count = 0;
        while (n !=0) {
            count ++;
            n= n & (n-1);
        }
        return  count ;
    }

    public static void main14(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(numOfOne2(n));
    }




    //13.猜数字游戏



        public static void main13(String[] args) {
            Random random = new Random(); // 默认随机种子是系统时间
            Scanner sc = new Scanner(System.in);
            int toGuess = random.nextInt(100);
            // System.out.println("toGuess: " + toGuess);
            while (true) {
                System.out.println("请输入要输入的数字: (1-100)");
                int num = sc.nextInt();
                if (num < toGuess) {
                    System.out.println("低了");
                } else if (num > toGuess) {
                    System.out.println("高了");
                } else {
                    System.out.println("猜对了");
                    break;
                }
            }
            sc.close();
        }



    //12.模拟输入密码，输入机会有三次，成 功提示登录成功
    //失败提示登录失败
    public static void login() {
        Scanner scanner = new Scanner(System.in);
        int count = 3;
        while (count != 0){
            System.out.println("请输入密码");
            String password = scanner.nextLine();

            //设置密码为123456
            //判断字符串是否相等不能 password == 123456
            //要用equals,其返回值是true或 false
            if (password.equals("123456")){
                System.out.println("登录成功");
                break;
            }else {
                count --;
                System.out.println("登录失败还有"+ count + "次机会");
            }
        }
    }
    public static void main12(String[] args) {
        login();
    }




    //11.独身数，水仙花数，四叶玫瑰数，五角星数，六合数
    public static void findNum(int n) {
        //从1开始，到输入的数字n结束
        //例：153
        // 难点是要知道是几次方，每一位数是多少
        for (int i = 1; i <= n; i++) {
            int tmp = i;
            int count = 0;//记住数字的位数
            while (tmp != 0){
                count++;
                tmp/=10;
            }
            //count现在已经知道是几次方,此时tmp=0
            tmp = i;//重新赋值
            int sum = 0;
            while (tmp != 0){
                //pow的返回类型是double，
                //用增量赋值运算符会自动进行强制类型转换
                //math.pow 是求次方
                sum += Math.pow(tmp%10,count);
                tmp /= 10;
            }
            if (sum == i){
                System.out.println(i);
            }
        }
    }
    public static void main11(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//999999之内的数
        findNum(n);
    }




    //10. 数一下1-100所有整数出现多少个数字九
    //9 19 29 39 49 59 69 79 89
    // 90 91 92 93 94 95 96 97 98 99
    //即/10或  %10

    public static void main10(String[] args) {
        int count = 0;
        for (int i = 1; i <= 100 ; i++) {
            if (i/10 == 9){
                System.out.println(i);
                count ++;
            }
            if (i%10 == 9){
                System.out.println(i);
                count ++;
            }
        }
        System.out.println("9的个数是"+count);
    }



    //9.第8题优化
    public static void main9(String[] args) {
        double sum = 0.0;
        int flag = 1;
        for (double i = 1; i <= 100; i++) {
            sum = sum + 1.0/i * flag;
            flag= -flag;
        }
        System.out.println("sum = " + sum);
    }




    //8.计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100
    public static void main8(String[] args) {
        double sum = 0.0;
        double positive = 0.0;
        double Negative = 0.0;
        for (double i = 1; i <= 99; i+=2) {
            positive += 1.0/i;
        }
        for (double i = 2; i <= 100; i+=2) {
            Negative += 1.0/i;
        }
        sum = positive - Negative;
        System.out.println(sum);
    }




    //7.求两个正整数的最大公约数
    //辗转相除法
    public static void main7(String[] args) {
        int a = 20;
        int b = 40;
        int c = a % b;
        while (c != 0){
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println("最大公约数是"+b);
    }





    //6. 99乘法表
    public static void main6(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i*j + " ");//+空格为了隔开美观
            }
            System.out.println();//什么都不写就是换行的效果
        }

    }





    //5.输出1000-2000之间所有的闰年
    //能被4整除但不能被100整除  或者 能被400整除
    public static void main5(String[] args) {
        for (int i = 1000; i <= 2000; i++) {
            if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0 ){
                System.out.println(i);
            }
        }
    }




    //4.素数再优化就是开根号  Math.sqrt(n)
    //所有和数学相关的的都在Math函数下，sqrt（）是开根号
    public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0){
                System.out.println(n+"不是素数");
                break;
            }
        }
        if (i > Math.sqrt(n)){
            System.out.println(n + "是素数");
        }
    }





    //3素数改进代码.上一个代码n越大，循环的次数越多
    //比如16，是1*16 2*8 4*4 都是小于等于16/8
    //所以可以写成i<=n/2
    public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (; i <= n/2; i++) {
            if (n % i == 0) {
                System.out.println(n + "不是素数");
                break;
            }
        }
        if (i > n/2){
            System.out.println(n+"是素数");
        }
    }


    //2.判断一个数字是否为素数,除了1和其本身不会被替他数整除
    //例如23  从2除到22
    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (; i < n; i++) {
            if (n % i == 0) {
                System.out.println(n + "不是素数");
                break;
            }
            if (i == n){
                System.out.println(n + "是素数");
            }
        }
    }





    //1.输入一个数字判断一个人的年龄状态
    public static void main1(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        if (n > 0 && n <= 18){
            System.out.println("少年");
        }else if (n >= 19 && n <= 28){
            System.out.println("青年");
        }else if (n >= 29 && n <= 55){
            System.out.println("中年");
        }else{
            System.out.println("老年");
        }
    }
}


